summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--usr.sbin/rpki-client/repo.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/usr.sbin/rpki-client/repo.c b/usr.sbin/rpki-client/repo.c
index 81b06b8d4dd..dd7b4815e91 100644
--- a/usr.sbin/rpki-client/repo.c
+++ b/usr.sbin/rpki-client/repo.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: repo.c,v 1.44 2023/04/26 16:32:41 claudio Exp $ */
+/* $OpenBSD: repo.c,v 1.45 2023/05/16 17:01:31 claudio Exp $ */
/*
* Copyright (c) 2021 Claudio Jeker <claudio@openbsd.org>
* Copyright (c) 2019 Kristaps Dzonsons <kristaps@bsd.lv>
@@ -806,6 +806,7 @@ rrdp_handle_file(unsigned int id, enum publish_type pt, char *uri,
ssize_t s;
char *fn = NULL;
int fd = -1, try = 0;
+ int flags;
rr = rrdp_find(id);
if (rr == NULL)
@@ -850,8 +851,17 @@ rrdp_handle_file(unsigned int id, enum publish_type pt, char *uri,
if (repo_mkpath(AT_FDCWD, fn) == -1)
goto fail;
- fd = open(fn, O_WRONLY|O_CREAT|O_TRUNC, 0644);
+ flags = O_WRONLY|O_CREAT|O_TRUNC;
+ if (pt == PUB_ADD)
+ flags |= O_EXCL;
+ fd = open(fn, flags, 0644);
if (fd == -1) {
+ if (errno == EEXIST) {
+ warnx("%s: duplicate publish element for %s",
+ rr->notifyuri, fn);
+ free(fn);
+ return 0;
+ }
warn("open %s", fn);
goto fail;
}