+
+int create_dir(char *which, long ACCESS, long UID, long GID)
+{
+ int rv;
+ rv = mkdir(which, ACCESS);
+ if ((rv == -1) && (errno != EEXIST)) {
+ syslog(LOG_EMERG,
+ "failed to create directory %s: %s",
+ which,
+ strerror(errno));
+ return rv;
+ }
+ rv = chmod(which, ACCESS);
+ if (rv == -1) {
+ syslog(LOG_EMERG,
+ "failed to set permissions for directory %s: %s",
+ which,
+ strerror(errno));
+ return rv;
+ }
+ rv = chown(which, UID, GID);
+ if (rv == -1) {
+ syslog(LOG_EMERG,
+ "failed to set owner for directory %s: %s",
+ which,
+ strerror(errno));
+ return rv;
+ }
+ return rv;
+}
+
+int create_run_directories(long UID, long GID)
+{
+ int rv = 0;
+ rv += create_dir(ctdl_message_dir , S_IRUSR|S_IWUSR|S_IXUSR, UID, -1);
+ rv += create_dir(ctdl_file_dir , S_IRUSR|S_IWUSR|S_IXUSR, UID, -1);
+ rv += create_dir(ctdl_spool_dir , S_IRUSR|S_IWUSR|S_IXUSR, UID, -1);
+ rv += create_dir(ctdl_netdigest_dir , S_IRUSR|S_IWUSR|S_IXUSR, UID, -1);
+ rv += create_dir(ctdl_nettmp_dir , S_IRUSR|S_IWUSR|S_IXUSR, UID, -1);
+ rv += create_dir(ctdl_key_dir , S_IRUSR|S_IWUSR|S_IXUSR, UID, -1);
+ rv += create_dir(ctdl_run_dir , S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH, UID, GID);
+ return rv;
+}