Changeset 50c5053 for lib


Ignore:
Timestamp:
10/18/11 15:39:27 (10 years ago)
Author:
Shane Alcock <salcock@…>
Branches:
4.0.1-hotfixes, cachetimestamps, develop, dpdk-ndag, etsilive, getfragoff, help, libtrace4, master, ndag_format, pfring, rc-4.0.1, rc-4.0.2, rc-4.0.3, rc-4.0.4, ringdecrementfix, ringperformance, ringtimestampfixes
Children:
31413f1
Parents:
979a84f4
Message:
  • When using libtrace + sudo to create output files, make those files belong to the user who is running libtrace rather than root.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • lib/iow-stdio.c

    r28318a4 r50c5053  
    6161static int safe_open(const char *filename, int flags)
    6262{
    63         int fd;
     63        int fd = -1;
     64        uid_t userid = 0;
     65        gid_t groupid = 0;
     66        char *sudoenv = NULL;
     67
    6468/* Try opening with O_DIRECT */
    6569#ifdef O_DIRECT
     
    7175                |(force_directio_write?O_DIRECT:0),
    7276                0666);
    73         if (fd != -1)
    74                 return fd;
    7577#endif
    7678/* If that failed (or we don't support O_DIRECT) try opening without */
    77         fd = open(filename,
    78                 flags
    79                 |O_WRONLY
    80                 |O_CREAT
    81                 |O_TRUNC,
    82                 0666);
    83         if (fd != -1)
     79        if (fd == -1) {
     80                fd = open(filename,
     81                        flags
     82                        |O_WRONLY
     83                        |O_CREAT
     84                        |O_TRUNC,
     85                        0666);
     86        }
     87
     88        if (fd == -1)
    8489                return fd;
     90
     91        /* If we're running via sudo, we want to write files owned by the
     92         * original user rather than root.
     93         *
     94         * TODO: make this some sort of config option */
     95
     96        sudoenv = getenv("SUDO_UID");
     97        if (sudoenv != NULL) {
     98                userid = strtol(sudoenv, NULL, 10);
     99        }
     100        sudoenv = getenv("SUDO_GID");
     101        if (sudoenv != NULL) {
     102                groupid = strtol(sudoenv, NULL, 10);
     103        }
     104       
     105        if (userid != 0 && fchown(fd, userid, groupid) == -1) {
     106                perror("fchown");
     107                return -1;
     108        }
     109
    85110        return fd;
    86111}
Note: See TracChangeset for help on using the changeset viewer.