Annotation of coherent/g/usr/lib/uucp/tay104/unix/mkdir.c, revision 1.1.1.1

1.1       root        1: /* mkdir.c
                      2:    Create a directory.  We must go through a subsidiary program to
                      3:    force our real uid to be the uucp owner before invoking the setuid
                      4:    /bin/mkdir program.  */
                      5: 
                      6: #include "uucp.h"
                      7: 
                      8: #include "sysdep.h"
                      9: 
                     10: #include <errno.h>
                     11: 
                     12: int
                     13: mkdir (zdir, imode)
                     14:      const char *zdir;
                     15:      int imode;
                     16: {
                     17:   struct stat s;
                     18:   const char *azargs[3];
                     19:   int aidescs[3];
                     20:   pid_t ipid;
                     21: 
                     22:   /* Make sure the directory does not exist, since we will otherwise
                     23:      get the wrong errno value.  */
                     24:   if (stat (zdir, &s) == 0)
                     25:     {
                     26:       errno = EEXIST;
                     27:       return -1;
                     28:     }
                     29: 
                     30:   /* /bin/mkdir will create the directory with mode 777, so we set our
                     31:      umask to get the mode we want.  */
                     32:   (void) umask ((~ imode) & (S_IRWXU | S_IRWXG | S_IRWXO));
                     33: 
                     34:   azargs[0] = UUDIR_PROGRAM;
                     35:   azargs[1] = zdir;
                     36:   azargs[2] = NULL;
                     37:   aidescs[0] = SPAWN_NULL;
                     38:   aidescs[1] = SPAWN_NULL;
                     39:   aidescs[2] = SPAWN_NULL;
                     40: 
                     41:   ipid = ixsspawn (azargs, aidescs, FALSE, FALSE, (const char *) NULL,
                     42:                   TRUE, FALSE, (const char *) NULL,
                     43:                   (const char *) NULL, (const char *) NULL);
                     44: 
                     45:   (void) umask (0);
                     46: 
                     47:   if (ipid < 0)
                     48:     return -1;
                     49: 
                     50:   if (ixswait ((unsigned long) ipid, (const char *) NULL) != 0)
                     51:     {
                     52:       /* Make up an errno value.  */
                     53:       errno = EACCES;
                     54:       return -1;
                     55:     }
                     56: 
                     57:   return 0;
                     58: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.