unsubscribe(struct mlmmj_list *list, const char *address, enum subtype typesub,
enum subreason reasonsub)
{
-
const char *subdir;
char *sublockname;
char *subwritename;
/* create a .name.lock file and aquire the lock */
myasprintf(&sublockname, ".%s.lock", dp->d_name);
- sublockfd = open(sublockname, O_RDWR | O_CREAT | O_EXLOCK,
+ sublockfd = openat(subdirfd, sublockname, O_RDWR | O_CREAT | O_EXLOCK,
S_IRUSR | S_IWUSR);
if (sublockfd < 0) {
log_error(LOG_ARGS, "Error opening lock file %s/%s/%s",
close(subread);
close(subwrite);
close(sublockfd);
- unlink(subwritename);
+ unlinkat(subdirfd, subwritename, 0);
myfree(subwritename);
myfree(sublockname);
continue;
}
} else { /* unsubres == 0, no subscribers left */
unlinkat(subdirfd, subwritename, 0);
+ unlinkat(subdirfd, dp->d_name, 0);
}
close(subread);
myfree(subwritename);
unlinkat(subdirfd, sublockname, 0);
myfree(sublockname);
-
- }
+ }
closedir(subddir);
}