Compare commits

...

3 commits

Author SHA1 Message Date
01057061f9 fix: use /var/www/feuille instead of /var/www/htdocs/feuille 2022-11-21 19:33:09 +01:00
de51c9830a fix(bin.c): safer generate_id()
set next byte of ID to zero each time a new character is appended to
prevent undefined behaviours.
2022-11-21 19:31:20 +01:00
fdf588e523 fix(feuille.c): pledge promises 2022-11-21 19:30:09 +01:00
6 changed files with 12 additions and 13 deletions

View file

@ -237,14 +237,14 @@ if you'd like to download the cron job.
### How do I remove expired pastes after some time? ### How do I remove expired pastes after some time?
You can put that in your crontab (by doing `sudo crontab -e`). You can put that in your crontab (by doing `sudo crontab -e`).
It will delete all files in `/var/www/htdocs/feuille` that are at least 7 It will delete all files in `/var/www/feuille` that are at least 7
days old. days old.
Don't forget to change the folder to the one **feuille**'s using and Don't forget to change the folder to the one **feuille**'s using and
eventually `+7` to the maximum file age you'd like to use. eventually `+7` to the maximum file age you'd like to use.
``` ```
0 0 * * * find /var/www/htdocs/feuille -type f -mtime +7 -exec rm {} + 0 0 * * * find /var/www/feuille -type f -mtime +7 -exec rm {} +
``` ```
See See
@ -264,7 +264,7 @@ $ make cgi
Once it's done, you can put `./web/cgi/feuille.cgi` in your website's Once it's done, you can put `./web/cgi/feuille.cgi` in your website's
`cgi-bin` folder (usually somewhere like `cgi-bin` folder (usually somewhere like
`/var/www/htdocs/my.paste.bin/cgi-bin`) and configure your web server `/var/www/my.paste.bin/cgi-bin`) and configure your web server
to execute CGI scripts. to execute CGI scripts.
You can then create an HTML form that will send a POST request to the You can then create an HTML form that will send a POST request to the

5
bin.c
View file

@ -34,7 +34,7 @@ char *generate_id(int min_length)
/* allocate a buffer to store the ID */ /* allocate a buffer to store the ID */
char *buffer; char *buffer;
if ((buffer = calloc(length + 1, sizeof(char))) == NULL) if ((buffer = malloc((length + 1) * sizeof(char))) == NULL)
return NULL; return NULL;
/* for each letter, generate a random one */ /* for each letter, generate a random one */
@ -43,6 +43,7 @@ char *generate_id(int min_length)
return NULL; return NULL;
buffer[i] = id_symbols[rand() % strlen(id_symbols)]; buffer[i] = id_symbols[rand() % strlen(id_symbols)];
buffer[i + 1] = 0;
/* collision? */ /* collision? */
if (i == length - 1 && paste_exists(buffer)) { if (i == length - 1 && paste_exists(buffer)) {
@ -54,12 +55,10 @@ char *generate_id(int min_length)
free(buffer); free(buffer);
return NULL; return NULL;
} }
buffer = tmp; buffer = tmp;
} }
} }
buffer[length] = 0;
return buffer; return buffer;
} }

View file

@ -1 +1 @@
0 0 * * * find /var/www/htdocs/feuille -type f -mtime +7 -exec rm {} + 0 0 * * * find /var/www/feuille -type f -mtime +7 -exec rm {} +

View file

@ -64,7 +64,7 @@ Default: \f[V]8888\f[R]
\f[B]-o path\f[R] \f[B]-o path\f[R]
Sets the path where \f[B]feuille\f[R] will output the pastes (and Sets the path where \f[B]feuille\f[R] will output the pastes (and
chroot, if possible). chroot, if possible).
Default: \f[V]/var/www/htdocs/feuille\f[R] Default: \f[V]/var/www/feuille\f[R]
.TP .TP
\f[B]-s bytes\f[R] \f[B]-s bytes\f[R]
Sets the maximum size for every paste (in bytes). Sets the maximum size for every paste (in bytes).
@ -104,7 +104,7 @@ Default: the number of threads configured on your machine.
.TP .TP
\f[B]sudo feuille\f[R] \f[B]sudo feuille\f[R]
Runs feuille in the background, chrooting into Runs feuille in the background, chrooting into
\f[V]/var/www/htdocs/feuille\f[R], dropping root privileges and spawning \f[V]/var/www/feuille\f[R], dropping root privileges and spawning
worker processes to accept incoming connections. worker processes to accept incoming connections.
.TP .TP
\f[B]feuille -p 1337\f[R] \f[B]feuille -p 1337\f[R]

View file

@ -49,7 +49,7 @@ and IPv6 addresses (won't work on OpenBSD).
**-o path** **-o path**
: Sets the path where **feuille** will output the pastes (and chroot, : Sets the path where **feuille** will output the pastes (and chroot,
if possible). if possible).
: Default: `/var/www/htdocs/feuille` : Default: `/var/www/feuille`
**-s bytes** **-s bytes**
: Sets the maximum size for every paste (in bytes). : Sets the maximum size for every paste (in bytes).
@ -88,7 +88,7 @@ you might not want to set this to a huge number.
# EXAMPLES # EXAMPLES
**sudo feuille** **sudo feuille**
: Runs feuille in the background, chrooting into `/var/www/htdocs/feuille`, : Runs feuille in the background, chrooting into `/var/www/feuille`,
dropping root privileges and spawning worker processes to accept dropping root privileges and spawning worker processes to accept
incoming connections. incoming connections.

View file

@ -39,7 +39,7 @@ char *argv0;
Settings settings = { Settings settings = {
.address = "0.0.0.0", .address = "0.0.0.0",
.url = "http://localhost", .url = "http://localhost",
.output = "/var/www/htdocs/feuille", .output = "/var/www/feuille",
.user = "www", .user = "www",
.id_length = 4, .id_length = 4,
@ -294,7 +294,7 @@ int main(int argc, char *argv[])
/* OpenBSD-only security measures */ /* OpenBSD-only security measures */
#ifdef __OpenBSD__ #ifdef __OpenBSD__
pledge("stdio proc inet", "stdio wpath inet"); pledge("proc stdio rpath wpath cpath inet", "stdio rpath wpath cpath inet");
#endif #endif
/* create a thread pool for incoming connections */ /* create a thread pool for incoming connections */