Search code examples
clinuxfilenfs

strange system call semantics on nfs mount


I am writing a little test program for the open() function in C @ open SuSE leap 42.2 x64.

Unfortunately the file being created gets -rwxrwxrwx permissions, although I hand over 0644 to the open() function after executing umask(0);

Could anyone please tell me, what I am doing wrong? (I got the example code from an open book (link).

Here's my code:

#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <string.h>
#include <unistd.h>

int main(int argc, char** argv) {

    /* Zugriffsrechte 644 */
    mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH;

    const char *new_file;
    int file_descriptor;
    /* Alle Zugriffsrechte der Einschraenkungsmaske erlauben */
    umask(0);
    /* Argument 2 der cmd line auswerten */
    if (argv[1] == NULL) {
        fprintf(stderr, "usage: %s datei_zum_oeffnen\n", *argv);
        return EXIT_FAILURE;
    }
    new_file = argv[1];
    file_descriptor = open(new_file, O_WRONLY|O_EXCL|O_CREAT, 0644);
    /* or var mode instead of (0644) */
    if (file_descriptor == -1) {
        perror("Fehler bei open ");
        return EXIT_FAILURE;
    }
    return (EXIT_SUCCESS);
}

Either way - handing over 0644 or the variable "mode" as open()'s third argument do not work as expected and the result when executing the program (as normal user) and handing in a filename is: -rwxrwxrwx and moreover: the file belongs to root:root instead of the executing user?!

What will I have to change?


Solution

  • Solved.

    The failure was compiling it using NetBeans 8.2. The folders and files created by NetBeans belong to root - creating the same .c-file in my home dir and compiling it there worked perfectly.

    Added: NetBeans is not running as root. The folder which my workspace was created in is a NTFS drive, mounted during boot with user-access - but the whole drive belongs to root in the first place. I am 99% convinced that this is what led me to wrong assumptions about NetBeans creating folders and files with wrong permissions.