+
+#if 0
+/* recursive chown()ing of a directory */
+static int recursive_chown(const char *path, uid_t uid, gid_t gid) {
+ struct stat sbuf;
+ DIR *odir = NULL;
+ struct dirent *entry;
+ char *name;
+ int ret = 0;
+ char newpath[PATH_MAX+1];
+ newpath[PATH_MAX] = '\0';
+
+ if (chown(path, uid, gid) < 0) {
+ LOG(log_error, logtype_afpd, "cannot chown() file [%s] (uid = %d): %s", path, uid, strerror(errno));
+ return -1;
+ }
+
+ if (lstat(path, &sbuf) < 0) {
+ LOG(log_error, logtype_afpd, "cannot chown() file [%s] (uid = %d): %s", path, uid, strerror(errno));
+ return -1;
+ }
+
+ if (S_ISDIR(sbuf.st_mode)) {
+ odir = opendir(path);
+ if (odir == NULL) {
+ LOG(log_error, logtype_afpd, "cannot opendir() [%s] (uid = %d): %s", path, uid, strerror(errno));
+ goto recursive_chown_end;
+ }
+ while (NULL != (entry=readdir(odir)) ) {
+ name = entry->d_name;
+ if (name[0] == '.' && name[1] == '\0')
+ continue;
+ if (name[0] == '.' && name[1] == '.' && name[2] == '\0')
+ continue;
+ sprintf(newpath, "%s/%s", path, name);
+ if (recursive_chown(newpath, uid, gid) < 0)
+ ret = -1;
+ } /* while */
+ } /* if */
+
+recursive_chown_end:
+ if (odir != NULL) {
+ closedir(odir);
+ }
+ return ret;
+}
+#endif
+