BSD 4 release
[unix-history] / usr / src / cmd / uucp / chkpth.c
index 11b6204..1901cc0 100644 (file)
@@ -1,7 +1,10 @@
+       /*  chkpth  2.2  5/21/79  13:20:43  */
 #include "uucp.h"
 #include <sys/types.h>
 #include <sys/stat.h>
 
 #include "uucp.h"
 #include <sys/types.h>
 #include <sys/stat.h>
 
+static char SiD[] = "@(#)chkpth        2.2";
+
 
 #define DFLTNAME "default"
 #define MAXUSERS 20
 
 #define DFLTNAME "default"
 #define MAXUSERS 20
@@ -37,8 +40,6 @@ char *path, *logname, *mchname;
        char c;
        int ret, i;
 
        char c;
        int ret, i;
 
-       if (prefix(THISDIR, path))
-               return(FAIL);
        if (Uptfirst) {
                ret = rdpth(Upt);
                ASSERT(ret == 0, "INIT USERFILE %d", Nbrusers);
        if (Uptfirst) {
                ret = rdpth(Upt);
                ASSERT(ret == 0, "INIT USERFILE %d", Nbrusers);
@@ -67,10 +68,6 @@ char *path, *logname, *mchname;
                        return(FAIL);
        }
 
                        return(FAIL);
        }
 
-       if (strcmp(*p, "/") != SAME) {
-               if (chklnk(path) > LINKLEVEL)
-                       return(FAIL);
-       }
        for (p = u->us_path; *p != NULL; p++)
                if (prefix(*p, path))
                        return(0);
        for (p = u->us_path; *p != NULL; p++)
                if (prefix(*p, path))
                        return(0);
@@ -129,9 +126,9 @@ struct userpath *u;
                else
                        pc = u + strlen(u->us_lname);
                u->us_mname = pc;
                else
                        pc = u + strlen(u->us_lname);
                u->us_mname = pc;
-               if (*u->us_lname == '\0')
+               if (*u->us_lname == '\0' && Logdef == NULL)
                        Logdef = u;
                        Logdef = u;
-               else if (*u->us_mname == '\0')
+               else if (*u->us_mname == '\0' && Mchdef == NULL)
                        Mchdef = u;
                i = 1;
                if (strcmp(pbuf[1], "c") == SAME) {
                        Mchdef = u;
                i = 1;
                if (strcmp(pbuf[1], "c") == SAME) {
@@ -192,26 +189,6 @@ char *name;
 }
 
 
 }
 
 
-/***
- *     chklnk(name)    get number of links
- *     char *name;
- *
- *     return codes: 0 - stat failed or directory | number of links
- */
-
-chklnk(name)
-char *name;
-{
-       struct stat s;
-
-       if (stat(name, &s) == -1)
-               return(0);
-       if ((s.st_mode & S_IFMT) == S_IFDIR)
-               return(0);
-       return(s.st_nlinks);
-}
-
-
 /***
  *     chkperm(file, user, mopt)       check write permission of file
  *     char *file, *user;
 /***
  *     chkperm(file, user, mopt)       check write permission of file
  *     char *file, *user;
@@ -229,7 +206,7 @@ chkperm(file, user, mopt)
 char *file, *user, *mopt;
 {
        struct stat s;
 char *file, *user, *mopt;
 {
        struct stat s;
-       int ret, bits;
+       int ret;
        char dir[MAXFULLNAME];
        extern char *lastpart();
 
        char dir[MAXFULLNAME];
        extern char *lastpart();
 
@@ -242,9 +219,8 @@ char *file, *user, *mopt;
          && mopt == NULL)
                return(FAIL);
 
          && mopt == NULL)
                return(FAIL);
 
-       bits = (geteuid() == 0) ? 02 : 0200;
        if (ret != -1) {
        if (ret != -1) {
-               if ((s.st_mode & bits) == 0)
+               if ((s.st_mode & ANYWRITE) == 0)
                        return(FAIL);
                else
                        return(0);
                        return(FAIL);
                else
                        return(0);