view src/lib/unix-socket-create.c @ 22713:cb108f786fb4

Updated copyright notices to include the year 2018.
author Stephan Bosch <stephan.bosch@dovecot.fi>
date Mon, 01 Jan 2018 22:42:08 +0100
parents 2e2563132d5f
children
line wrap: on
line source

/* Copyright (c) 2005-2018 Dovecot authors, see the included COPYING file */

#include "lib.h"
#include "net.h"
#include "unix-socket-create.h"

#include <unistd.h>
#include <sys/stat.h>

int unix_socket_create(const char *path, int mode,
		       uid_t uid, gid_t gid, int backlog)
{
	mode_t old_umask;
	int fd;

	old_umask = umask(0777 ^ mode);
	fd = net_listen_unix_unlink_stale(path, backlog);
	umask(old_umask);

	if (fd < 0) {
		i_error("net_listen_unix(%s) failed: %m", path);
		return -1;
	}

	if (uid != (uid_t)-1 || gid != (gid_t)-1) {
		/* set correct permissions */
		if (chown(path, uid, gid) < 0) {
			i_error("chown(%s, %s, %s) failed: %m",
				path, dec2str(uid), dec2str(gid));
			i_close_fd(&fd);
			return -1;
		}
	}
	return fd;
}