Index: trunk/Ohana/src/libohana/include/ohana.h
===================================================================
--- trunk/Ohana/src/libohana/include/ohana.h	(revision 6245)
+++ trunk/Ohana/src/libohana/include/ohana.h	(revision 6674)
@@ -116,7 +116,8 @@
 char   *fileextname            PROTO((char *file));
 char   *findexec               PROTO((int argc, char **argv));
-int     mkdirhier              PROTO((char *path));
+int     mkdirhier              PROTO((char *path, int mode));
 void    make_backup            PROTO((char *filename));
 int     check_file_access      PROTO((char *basefile, int backup, int verbose));
+int     check_file_exec        PROTO((char *filename));
 
 /* in glockfile.c */
Index: trunk/Ohana/src/libohana/src/findexec.c
===================================================================
--- trunk/Ohana/src/libohana/src/findexec.c	(revision 6245)
+++ trunk/Ohana/src/libohana/src/findexec.c	(revision 6674)
@@ -1,5 +1,5 @@
 # include <ohana.h>
 
-int _check_permissions (char *filename) {
+int check_file_exec (char *filename) {
   
   struct stat filestat;
@@ -48,5 +48,5 @@
     if (VERBOSE) fprintf (stderr, "directory %s does not exist, creating...\n", path);
     cmode = S_IRWXU | S_IRWXG | S_IRWXO;
-    status = mkdir (path, cmode);
+    status = mkdirhier (path, cmode);
     if (status == -1) {
       if (VERBOSE) fprintf (stderr, "can't create %s\n", path);
@@ -212,5 +212,5 @@
   /* if given an absolute or relative path, use it */
   if (strchr (argv[0], '/') != (char *) NULL) {
-    status = _check_permissions (argv[0]);
+    status = check_file_exec (argv[0]);
     if (status) {
       if (realpath (argv[0], path) == (char *) NULL) return ((char *) NULL);
@@ -245,5 +245,5 @@
       }
       sprintf (name, "%s/%s", path, argv[0]);
-      status = _check_permissions (name);
+      status = check_file_exec (name);
 
       if (status) {
@@ -257,13 +257,16 @@
 }
 
-int mkdirhier (char *path) {
+/* make directory hierarchy, 0: success, -1: failure (just like mkdir) */
+int mkdirhier (char *path, int mode) {
 
   char *tpath;
 
-  if (mkdir (path, 0777)) {
+  /* force addition of user exec/read/write */
+  mode |= S_IRWXU;
+  if (mkdir (path, mode)) {
     if (errno == ENOENT) { 
       tpath = pathname (path);
-      if (!mkdirhier (tpath)) {
-	if (mkdir (path, 0777)) {
+      if (!mkdirhier (tpath, mode)) {
+	if (mkdir (path, mode)) {
 	  return (-1);
 	} else {
