aboutsummaryrefslogtreecommitdiffstats
path: root/src/server
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2024-01-31 04:33:23 +0000
committerLaurent Bercot <ska@appnovation.com>2024-01-31 04:33:23 +0000
commit8a77310de280361dac86429dfda2c21d9cc7ac44 (patch)
treee27a6a2fb40019ff1e5ec385b2e411e21da12e44 /src/server
parenta9739559f76a0a3dd691c580242ea0f5721d5b67 (diff)
downloadapaste-8a77310de280361dac86429dfda2c21d9cc7ac44.tar.gz
apasted options: change to -n maxfiles, add -s maxsize
Signed-off-by: Laurent Bercot <ska@appnovation.com>
Diffstat (limited to 'src/server')
-rw-r--r--src/server/apasted.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/server/apasted.c b/src/server/apasted.c
index b338154..a2bed17 100644
--- a/src/server/apasted.c
+++ b/src/server/apasted.c
@@ -27,7 +27,7 @@
#include <apaste/config.h>
#include "apaste-common.h"
-#define USAGE "apasted [ -r rtimeout ] [ -w wtimeout ] [ -d rootdir ] [ -p prefix ] [ -m maxfiles ]"
+#define USAGE "apasted [ -r rtimeout ] [ -w wtimeout ] [ -d rootdir ] [ -p prefix ] [ -n maxfiles ] [ -s maxsize ]"
#define dieusage() strerr_dieusage(100, USAGE)
#define FORBIDDEN " \t\r\n\"<>&;"
@@ -155,7 +155,7 @@ static inline size_t add_unique (stralloc *sa, size_t *indices, uint32_t n, char
return blen ;
}
-static void read_one_file (char const *dir, buffer *b, buffer *ib, stralloc *sa, size_t *indices, uint32_t n, tain const *deadline)
+static void read_one_file (char const *dir, buffer *b, buffer *ib, stralloc *sa, size_t *indices, uint32_t n, uint64_t maxsize, tain const *deadline)
{
uint64_t filelen ;
size_t bnamelen ;
@@ -201,7 +201,7 @@ static void read_one_file (char const *dir, buffer *b, buffer *ib, stralloc *sa,
char fmt[UINT64_FMT] ;
if (sanitize_read(timed_getlnmax_g(b, fmt, UINT64_FMT, &w, '\n', deadline)) <= 0) goto err ;
m = uint64_scan(fmt, &filelen) ;
- if (!m || m+1 != w || fmt[m] != '\n') goto err ;
+ if (!m || m+1 != w || fmt[m] != '\n' || filelen > maxsize) goto err ;
}
{
@@ -246,6 +246,7 @@ int main (int argc, char const *const *argv)
char const *prefix = "" ;
tain rtto = TAIN_INFINITE_RELATIVE, wtto = TAIN_INFINITE_RELATIVE ;
tain deadline ;
+ uint64_t maxsize = 1048576 ;
uint32_t maxfiles = 0 ;
uint32_t n ;
char buf[4097] ;
@@ -258,7 +259,7 @@ int main (int argc, char const *const *argv)
subgetopt l = SUBGETOPT_ZERO ;
for (;;)
{
- int opt = subgetopt_r(argc, argv, "r:w:d:p:m:", &l) ;
+ int opt = subgetopt_r(argc, argv, "r:w:d:p:n:s:", &l) ;
if (opt == -1) break ;
switch (opt)
{
@@ -266,7 +267,8 @@ int main (int argc, char const *const *argv)
case 'w' : if (!uint320_scan(l.arg, &wt)) dieusage() ; break ;
case 'd' : rootdir = l.arg ; break ;
case 'p' : prefix = l.arg ; break ;
- case 'm' : if (!uint320_scan(l.arg, &maxfiles)) dieusage() ; break ;
+ case 'n' : if (!uint320_scan(l.arg, &maxfiles)) dieusage() ; break ;
+ case 's' : if (!uint640_scan(l.arg, &maxsize)) dieusage() ; break ;
default : dieusage() ;
}
}
@@ -302,7 +304,7 @@ int main (int argc, char const *const *argv)
}
if (!mkdtemp(dir)) strerr_diefu1sys(111, "mkdtemp") ;
- if (n == 1) read_one_file(dir, &b, 0, 0, 0, 0, &deadline) ;
+ if (n == 1) read_one_file(dir, &b, 0, 0, 0, 0, maxsize, &deadline) ;
else
{
stralloc sa = STRALLOC_ZERO ;
@@ -310,7 +312,7 @@ int main (int argc, char const *const *argv)
buffer ib ;
char ibuf[4096] ;
prepare_index(&ib, dir, ibuf, 4096) ;
- for (uint32_t i = 0 ; i < n ; i++) read_one_file(dir, &b, &ib, &sa, indices, i, &deadline) ;
+ for (uint32_t i = 0 ; i < n ; i++) read_one_file(dir, &b, &ib, &sa, indices, i, maxsize, &deadline) ;
finish_index(&ib, dir) ;
}