-#else
- struct sockaddr_un addr;
- struct stat statbuf;
- char *lastslash = strrchr(controlsocketname, '/');
- if(lastslash != NULL) {
- /* control socket is not in cwd; stat its parent */
- *lastslash = 0;
- result = stat(controlsocketname, &statbuf);
- *lastslash = '/';
- } else
- result = stat(".", &statbuf);
-
- if(result < 0) {
- fprintf(stderr, "Unable to check control socket directory permissions: %s\n", strerror(errno));
- return 1;
- }
-
- if(statbuf.st_uid != 0 || (statbuf.st_mode & S_IXOTH) != 0 || (statbuf.st_gid != 0 && (statbuf.st_mode & S_IXGRP)) != 0) {
- fprintf(stderr, "Insecure permissions on control socket directory\n");
- return 1;
- }
-
- if(strlen(controlsocketname) >= sizeof addr.sun_path) {
- fprintf(stderr, "Control socket filename too long!\n");
- return 1;
- }
-
- fd = socket(PF_UNIX, SOCK_STREAM, 0);
- if(fd < 0) {
- fprintf(stderr, "Cannot create UNIX socket: %s\n", strerror(errno));
- return 1;
- }
-
- memset(&addr, 0, sizeof addr);
- addr.sun_family = AF_UNIX;
- strncpy(addr.sun_path, controlsocketname, sizeof addr.sun_path - 1);